EL FORMATO DEL FICHERO DE HABITACIN DE AETHERIA

Un fichero de habitacin de Aetheria corresponde a una habitacin del mundo, la aplicacin que relaciona ficheros con habitaciones es biyectiva.
Un fichero de habitacin es un archivo en formato de texto ASCII (estndar) cuya extensin es .ae (Aetheria Entity), como el resto de ficheros de entidades del mundo de Aetheria. El nombre del fichero ha de comenzar por 00 (de momento), ya que 0 es el cdigo que indica que se trata de una habitacin, y el segundo 0 indica que no pertenece a ninguna subclase de la clase habitacin (como tienda, etc.) Despus de esos dos dgitos 00, otros seis dgitos sern el identificador de la habitacin, y si se quiere que el juego la cargue tienen que existir todos los ficheros con nmero anterior (por ejemplo, para que el juego cargue 00000382.ae tienen que existir ficheros para todas las habitaciones anteriores a la 382). Por lo dems, el orden que sigan los ficheros no tiene necesariamente que coincidir con ningn orden "geogrfico" de las habitaciones.
El contenido de un fichero de habitacin es una serie de lneas, en el nmero que sea, que constan de:
	-Un nmero que identifica de qu tipo de lnea se trata.
	-Un espacio para separar este nmero del resto.
	-La informacin de la lnea, que depende del tipo de lnea.
As, por ejemplo, un fichero de habitacin puede ser ste:
(nombre: 00000000.ae)
099 Mi primer fichero de habitacin.
001 000000
003 0
004 Habitacin vaca
010 0&0&No hay descripcin de momento.




LNEAS DEL FICHERO DE HABITACIN DE AETHERIA

He aqu todas las que de momento existen, con su nombre.
(*=dinmicas)
(&=obligatorias)
(?=no se sabe si la pondr)

000 ?roomtype
001 &idnumber
002  inherit
003*&state line
004 &title/name

010 &description list
011 &standard exits
012  other exits

020* object refs
021* mob refs
022* character refs
023* spell refs

030  extra descriptions
031  only restrictions

040  bitvectors

090  author
091  group
092  generated by
099  comment




FORMATO DEL CONTENIDO DE LAS LNEAS

Llamamos contenido de una lnea a toda la informacin que contiene despus del primer espacio, es decir, sin contar el nmero que identifica la lnea.
Su formato ser diferente segn el tipo de lnea de que hablemos:


001  IDNUMBER
(Obligatoria)

Su formato es: <idnumber>

Donde:
"idnumber" es un nmero de seis dgitos que se corresponde con la ID de la habitacin, es decir, los seis ltimos dgitos del nombre del fichero. (para 00004812.ae, ser 004812).

Ejemplo de lnea completa:
01 000011
99 (ID de habitacin = 11)

Los ceros a la izquierda no son realmente necesarios, aunque puedan clarificar.


002  INHERIT

Si existe esta lnea, nuestra habitacin heredar todas las propiedades de otra habitacin que ya hayamos cargado. Es decir que, por ejemplo, si queremos crear una habitacin B exactamente igual que la habitacin A que ya tenemos salvo por una lnea, slo tenemos que poner esa lnea y una lnea inherit que indique que se debe heredar de A. El juego leer la habitacin A y luego la sobreescribir con los valores que indiquemos en B, que siempre tendrn preferencia.
Hay ciertas lneas que no se heredan, que son la ID y todas las lneas dinmicas (estado y referencias). Las lneas obligatorias que no entren en este conjunto dejan de ser obligatorias si se van a heredar, es decir, si hacemos INHERIT poniendo una habitacin que tiene ttulo ya no tenemos por qu poner el ttulo en la nueva, pues el ttulo ser heredado.

Su formato es: <idnumber>

Donde:
"idnumber" es un nmero de ocho dgitos que se corresponde con la identificacin (ID) completa de la habitacin de la que se heredar. IMPORTANTE: la habitacin de la que se hereda debe tener ID menor que la habitacin heredera. As se evitan ciclos en la herencia o herencias irregulares.

Ejemplo:

01 000011
02 000010
011 (...)
099 La habitacin 000011 ser una copia exacta de la 000010 salvo por la lnea 11, esta lnea y otras que pueda tener.


003  STATE
(Obligatoria)


Es la lnea que nos da el estado de la habitacin. 

Su formato es: <state>

Donde:
"state" es un entero de 32 bits en el que cada bit representa algn parmetro del estado.


(...................)
(...................)

Ejemplo:

003 54


004 TITLE
(Obligatoria)


Lnea que da el ttulo de la habitacin.

Su formato es: <titlestring>

Donde:
"titlestring" es una frase corta que describe la habitacin, por ejemplo, "Plaza Mayor" o "Claro en el bosque". El ttulo no se mostrar normalmente en el juego y no tiene ningn valor identificador (es decir, dos habitaciones pueden tener el mismo ttulo, pues no se identifican por l); pero debe ponerse un ttulo que represente a la habitacin para su mejor visualizacin en editores, por ejemplo, y para que se pueda mostrar en la depuracin del juego.

Ejemplo:

004 El dormitorio de Karen


010 DESCRIPTION LIST
(Obligatoria)


Lnea con una lista de descripciones para la habitacin segn el estado en que se encuentre.

Su formato es: <description_string>&<description_string>&(...)&<description_string>

Donde el formato de <description_string> es: <comparando>&<mascara>&<descripcion_unitaria>

Por lo tanto, el nmero de caracteres & en la lista tiene que ser de la forma 3n-2, y, evidentemente, el carcter & utilizado como separador no puede aparecer en el interior de ninguna descripcin.

Para saber cmo se han de organizar las descripciones unitarias, es necesario saber cmo funcionan y cul es el significado de comparando y mscara. Cada descripcin unitaria no es ms que un trozo de descripcin que se muestra estando la habitacin en un determinado nmero de estado o estados (un solo estado, todos los estados, los estados de un cierto tipo, o incluso ningn estado, aunque esto ltimo no tendra mucho sentido).
As, el proceso que sigue el juego a la hora de describir una habitacin es:
PARA I = O HASTA NUMERO_DESCRIPCIONES_UNITARIAS HACER
	SI ESTADO_HABITACION.CUMPLE_CONDICION_IMPUESTA_POR( COMPARANDO[I],MASCARA[I] ) ENTONCES
		SACAR POR PANTALLA DESCRIPCION_UNITARIA[I]
Por supuesto, las descripciones se miran en orden. La condicin impuesta al estado de la habitacin por el comparando y la mscara es que los bits que sean 1 en la mscara sean iguales en el estado y en el comparando. Es decir, por ejemplo: una mscara de ceros significa que la condicin se verificar siempre, sea cual sea el comparando, as que esa parte de la descripcin se mostrar en cualquier caso. Una mscara de unos significa que se compara completamente con el comparando, es decir, slo se mostrar la descripcin si el estado de la habitacin es exactamente el ah especificado. Una mscara con un solo bit a uno significa que slo se ha de comparar ese bit de estado.
La lista de descripciones puede ser todo lo larga que sea necesario.

He aqu un ejemplo donde se ve cmo se debe organizar la descripcin y el tono y tiempo a utilizar:

010 0&64&Te hallas en una plaza de considerable tamao. Una placa informa de que se trata de la Plaza Nueva de Aetheria.&64&64&Ests en la Plaza Nueva de Aetheria, la ms oriental de las dos grandes plazas del centro de la ciudad.&0&0&Se ve a simple vista que la plaza dej hace mucho tiempo de ser realmente "nueva". El pavimento es de piedra, y en el centro hay una fuente, tambin ptrea, cuya agua fluye con suave murmullo. La fuente est coronada por la estatua de un hombre alto, de mediana edad, que sostiene una pluma en una de sus manos y un pergamino en la otra. Al Oeste se alza la fachada trasera del edificio que unas grandes letras rojas identifican como "Ayuntamiento", y que cuenta con un gran arco que se puede atravesar para acceder a otra plaza, y encima del arco un gran reloj mecnico de esfera redonda y blanca. Al Norte parece comenzar una importante avenida, pavimentada con adoquines, mientras que al Sur hay una pequea plazoleta. Al Este, un camino sin puertas o verjas de ningn tipo conduce a un verde jardn.&0&6&El agua de la alegre fuente brilla bajo la luz del sol.&2&6&El cielo est cubierto de nubes algodonosas.&4&6&El agua de lluvia se confunde y mezcla, al caer, con el de la fuente central.&1&1&La plaza est bien iluminada por una potente fuente de luz situada encima del sombrero de la estatua.


011 STANDARD EXITS
(Obligatoria)


Lnea con una lista de las salidas estndar, especificando su destino, tiempo para atravesarlas, etc.

Su formato es: <norte>@<sur>@<oeste>@<este>@<noroeste>@<nordeste>@<suroeste>@<sureste>@<arriba>@<abajo>

Cada uno de los campos representa la salida que tiene la habitacin en la direccin correspondiente. Estas salidas, a las que se accede por comandos como "ir norte", "ir al sur", etc. se denominan las salidas estndar de la habitacin. Otras salidas, las personalizadas, seran cosas como "entrar en la casa", "salir", "ir por el arco", etc. y se ponen en la lnea siguiente (012).
Los campos deben estar ordenados como se especifica, pues el orden es la forma que tiene Aetheria de saber cul es la salida hacia cada punto cardinal. Esto implica que tienen que aparecer necesariamente los diez campos; pero no necesariamente que toda habitacin tenga que tener salida en las diez direcciones, pues un campo que se deje con destino a cero o a una letra se entender que corresponde a una salida inexistente. Se ver a continuacin, con el formato del campo.

El formato de cada campo de salida es: <destino>$<description_list>$<tiempo_salida>$<peerable>$<state>$<keyid>

O bien:
<destino_invalido>

Donde:

"destino" es un nmero, una ID de habitacin, que especifica la habitacin a la que se acceder por esa salida.
"description_list" es una lista de descripciones de la salida, con comparando y mscara, en el mismo formato de lista de descripcin explicado con la lnea 010. En este caso, la descripcin corresponde a la accin de caminar a travs de la salida.
"tiempo_salida" es el tiempo en TU's (unidades de tiempo) que se tarda en pasar de una habitacin a otra. Es un nmero entero, no recomendable cero ni negativo.
"peerable" es un flag que indica si se puede ver a travs de esta salida. Si vale 1, significa que se puede ver desde esta habitacin la habitacin destino.
"state" es el estado de la salida. Puede ser "item $+ n" si depende de un item.
"keyid" es una lista de nmeros, IDs de objeto, correspondientes a las llaves que pueden abrir esta salida si est cerrada (cerrado o abierto especificado en el estado). -> lista con &.
"destino_invalido" es el nmero 0 o una serie de caracteres no numricos. Las salidas con este formato son salidas no permitidas (habitacin que no tiene salida en esa direccin).

Ejemplo:

011 0007$0&0&Te vas hacia el Norte por una amplia avenida.$30$0$0$0@0009$0&0&Te diriges hacia la plazuela que hay al Sur.$30$0$0$0@0004$0&0&Te diriges hacia el arco del Ayuntamiento.$30$0$0$0@0008$0&0&Caminas hacia el jardn al Este.$30$0$0$0@0<no>@0<ne>@0<so>@0<se>@0@0


012 OTHER EXITS
(Obligatoria)


Lnea con una lista de las salidas personalizadas, especificando su destino, tiempo para atravesarlas, etc.

Su formato es: <salida1>@<salida2>@...@<salidaN>

Las salidas personalizadas son cualquier salida que se active con un comando diferente a norte, sur, este, oeste, nordeste, noroeste, sureste, suroeste, arriba o abajo. El formato


New formats
-----------

STANDARD
destino  -  description list  -  tiempo salida [tok3] - peerable bit [tok4] -  state word  -  key ID - associated object if any

OTHER
destino  -  description list  -  tiempo salida [tok3]  -  reference(command) list [tok4] - peerable bit  -  state word  -  key ID - associated object if any

If a path (exit) has an associated object, then its state is associated object's state (ex. door state). Two exits (ex. east and exit and door) may have the same associated object.